<?php

/**
 * mForge Framework
 *
 * LICENSE:
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * The license is bundled with this package in the file LICENSE.txt.
 * You may also obtain a copy of the License at this URL:
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * @copyright  Copyright (c) 2011, Jonathan Hedrén
 * @author     Jonathan Hedrén <jonathan.hedren@gmail.com>
 * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
 */

namespace mForge;

class ValidationResult
{
    /**
     *
     * @var boolean
     */
    private $valid;

    /**
     *
     * @var array
     */
    private $validationMessages = array();

    /**
     * 
     */
    public function __construct()
    {
        \mForge\Helpers\HtmlBinder::setValidationResult($this);
    }

    /**
     *
     * @return boolean
     */
    public function isValid()
    {        
        foreach ($this->valid as $fieldValid) {
            if (!$fieldValid) {
                return false;
            }
        }
        return true;
    }

    /**
     *
     * @param string $field
     * @return boolean
     */
    public function isFieldValid($field)
    {
        return isset($this->valid[$field]) ? $this->valid[$field] : true;
    }

    /**
     *
     * @return array
     */
    public function getValidationMessages($field)
    {
        return isset($this->validationMessages[$field]) ? $this->validationMessages[$field] : array();
    }

    /**
     *
     * @param boolean $valid
     * @return ValidationResult 
     */
    public function setValid($valid = true)
    {
        foreach ($this->valid as $field => $fieldValid) {
            $this->setFieldValid($field);
        }
        return $this;
    }

    /**
     *
     * @param string $field
     * @param boolean $valid
     */
    public function setFieldValid($field, $valid = true) {
        $this->valid[$field] = (boolean)$valid;
        if ($valid) {
            unset($this->validationMessages[$field]);
        }
        return $this;
    }

    /**
     *
     * @param string $field
     * @param boolean $valid
     * @param array $validationMessages
     * @return ValidationResult 
     */
    public function setFieldResult($field, $valid, array $validationMessages)
    {
        $this->valid[$field] = (boolean)$valid;
        $this->validationMessages[$field] = $validationMessages;
        return $this;
    }
}